b03f5a096a38a81cba907ca98aaff200f576a52b,src/main/java/au/edu/wehi/idsv/sam/SAMRecordUtil.java,SAMRecordUtil,bestMateFor,#SAMRecord#List#,884
Before Change
.filter(m -> r.getAlignmentStart() == m.getMateAlignmentStart())
.filter(m -> r.getReadNegativeStrandFlag() == m.getMateNegativeStrandFlag()).findFirst();
// see if we already point to one of the mates
if (!best.isPresent()) {
best = mates.stream().filter(m -> m.getReadUnmappedFlag() == r.getMateUnmappedFlag())
.filter(m -> m.getReferenceIndex() == r.getMateReferenceIndex())
.filter(m -> m.getAlignmentStart() == r.getMateAlignmentStart())
After Change
.filter(m -> m.getAlignmentStart() == r.getMateAlignmentStart())
.filter(m -> m.getReadNegativeStrandFlag() == r.getMateNegativeStrandFlag()).findFirst();
// see if one of the mates already points to us
if (best.isPresent()) return best.get();
best = mates.stream().filter(m -> r.getReadUnmappedFlag() == m.getMateUnmappedFlag())
.filter(m -> r.getReferenceIndex() == m.getMateReferenceIndex())
.filter(m -> r.getAlignmentStart() == m.getMateAlignmentStart())
.filter(m -> r.getReadNegativeStrandFlag() == m.getMateNegativeStrandFlag()).findFirst();
if (best.isPresent()) return best.get();
// match primary with primary and secondary with secondary
best = mates.stream().filter(m -> m.getSupplementaryAlignmentFlag() == r.getSupplementaryAlignmentFlag())
.filter(m -> m.getNotPrimaryAlignmentFlag() == r.getNotPrimaryAlignmentFlag())
// prefer mapped reads
.sorted(Comparator.comparing(SAMRecord::getReadUnmappedFlag)).findFirst();
if (best.isPresent()) return best.get();
// just get anything that's not a supplementary alignment
best = mates.stream().filter(m -> m.getSupplementaryAlignmentFlag() == r.getSupplementaryAlignmentFlag())
.findFirst();